package com.oneday.ashop.console.base.shiro;


import lombok.Data;
import org.apache.shiro.config.Ini;
import org.springframework.beans.factory.FactoryBean;

@Data
public class ChainDefinitionSectionMetaSource implements FactoryBean<Ini.Section> {

	// 静态资源访问权限
	private String filterChainDefinitions = null;

	public Ini.Section getObject() throws Exception {
		Ini ini = new Ini();
		// 加载默认的url
		ini.load(filterChainDefinitions);
		Ini.Section section = ini.getSection(Ini.DEFAULT_SECTION_NAME);
		// 循环Resource的url,逐个添加到section中。section就是filterChainDefinitionMap,
		// 里面的键就是链接URL,值就是存在什么条件才能访问该链接

		//因为过滤的优先，先把所有的资源的权限移除，
		String allResource = section.get("/**");
		section.remove("/**");
//		List<Role> roles = roleService.findAll();
//		Set<Integer> resourceSet = new TreeSet<>();
//		for(Role role : roles) {
//			resourceSet.addAll(role.getResources());
//		}
//		List<Resource> resources = resourceService.findResource(resourceSet);
//		Map<Integer, Resource> map =CollectionUtil.buildMap(resources, Integer.class, Resource.class, "id");
//		for(Role role : roles) {
//			List<Integer> resIds = role.getResources();
//			for(Integer id : resIds) {
//				if(section.containsKey(map.get(id).getUrl())) {
//					String value =  section.get(map.get(id).getUrl());
//					value = value.substring(0, value.length()-1);
//					section.put(map.get(id).getUrl(), value + "," + role.getName() + "]");
//				}else{
//					section.put(map.get(id).getUrl(), "roles["+ role.getName() + "]");
//				}
//			}
//		}
//		所有资源的访问权限，这里重新把所有资源的权限加上
		section.put("/**", allResource);
		return section;
	}

	/**
	 * 通过filterChainDefinitions对默认的url过滤定义
	 * 
	 * @param filterChainDefinitions
	 *            默认的url过滤定义
	 */
	public void setFilterChainDefinitions(String filterChainDefinitions) {
		this.filterChainDefinitions = filterChainDefinitions;
	}

	public Class<?> getObjectType() {
		return this.getClass();
	}

	public boolean isSingleton() {
		return false;
	}
}
